A serial-attached small computer system interface (SCSI)-serial SCSI protocol (SAS-SSP) host bus adapter (HBA) device may communicate with target devices (e.g., disk drives) in a wide port configuration. The wide port may comprise a plurality of physical interface pairs, one interface of a pair at the HBA and another interface at the target device. A frame path between the HBA and the target device may include the interfaces, and may be referred to as a “lane.” Frames associated with a given input-output (“IO”) or SCSI initiator-target-logical unit-queue (“ITLQ”) may be transmitted in a sequence referred to herein as an “IO stream subset order.”
A SAS protocol specification permits transmission of integral frames on different lanes. A SAS end device may initiate lane switching for efficiency of lane utilization in a SAS wide port configuration. A lane switch may occur, for example, when ACK/NAK sequences become balanced on a lane originally associated with an IO. According to the SAS standard, there are two types of frames, interlock frames and non-interlock frames. In the case of interlock frames, a transmitter may wait for acknowledgements before sending another frame. In contrast, the transmitter may send additional non-interlock frames before receiving acknowledgements to outstanding frames. ACK/NAK sequences may be balanced when a total number of received ACK/NAKs is equal to the total number of transmitted frames. For additional information regarding SAS-SSP, please see Working Draft Project American National Standard T10, Information Technology—Serial Attached SCSI (SAS) Version 1.1 Revision 09d (30 May 2005).
An earlier received frame associated with an IO may become stalled in a first receive buffer. Meanwhile, a later-received, lane-switched frame associated with the IO may appear at a head of a second receive buffer, ready for processing by a protocol processor associated with the second lane. The second-lane protocol processor may determine whether frames such as the earlier received frame associated with the IO are buffered on the stalled lane. This condition may result in complicated IO tag searching among lanes comprising the wide port, including perhaps cross-communications between the lanes.
Another potential complication is that two frames associated with the same IO may appear at the head of multiple receive buffers at the same time. Determining which frame should be processed first may be difficult, especially in the case of a large number of lanes within a SAS wide port.